package com.xjc.market.frame.base;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import tk.mybatis.mapper.common.Mapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xjc.infra.base.BaseBiz;
import com.xjc.infra.db.Pager;
import com.xjc.infra.entity.QueryResult;
import com.xjc.infra.util.ClassUtil;

/**
 * 基础biz(基于mybatis,单表的biz)
 * 前提条件要有对应的Mapper<T>的实现
 * T 是单表的对象
 * @author  liangcz
 * @Date    2017年9月11日 下午6:08:07
 * @version 1.0
 */
public abstract class BaseTBiz<T> extends BaseBiz{

    @Autowired
    protected Mapper<T> mapper;

    public Mapper<T> getMapper() {
        return mapper;
    }

    public T selectByKey(Object key) {
        return mapper.selectByPrimaryKey(key);
    }

    public int save(T entity) {
        return mapper.insert(entity);
    }

    public int delete(Object key) {
        return mapper.deleteByPrimaryKey(key);
    }

    public int updateAll(T entity) {
        return mapper.updateByPrimaryKey(entity);
    }

    public int updateNotNull(T entity) {
        return mapper.updateByPrimaryKeySelective(ClassUtil.transferBlankToNull(entity));
    }

    public List<T> selectByExample(Object example) {
        return mapper.selectByExample(example);
    }
    /**
     * 查询单条记录
     * @author liangcz
     * @date   2017年9月15日 下午5:03:08
     * @return T
     */
    public T selectOne(T record){
    	return mapper.selectOne(ClassUtil.transferBlankToNull(record));
    }
    /**
     * 查询返回一个列表
     * @author liangcz
     * @date   2017年9月15日 下午5:25:56
     * @return List<T>
     */
    public List<T> selectList(T record){
    	return mapper.select(record);
    }
    /**
     * 根据entity和pager查询分页
     * @author liangcz
     * @date   2017年9月14日 下午3:10:29
     * @return QueryResult
     */
    public QueryResult select(T entity,Pager pager){
    	QueryResult queryResult = new QueryResult();
		PageHelper.startPage(pager.getPageNumber(), pager.getPageCount());
		List<T> list = mapper.select(ClassUtil.transferBlankToNull(entity));
		PageInfo<T> pageInfo = new PageInfo<T>(list);
		pager.setRecordCount((int) pageInfo.getTotal());
		queryResult.setPager(pager);
		queryResult.setList(list);
		return queryResult;
    }
    //TODO 其他...
}
